Spark Streaming 状态管理函数包括updateStateByKey和mapWithState
一、updateStateByKey
官网原话:In every batch, Spark will apply the state update function for all existing keys, regardless of whether they have new data in a batch or not. If the update function returns None then the key-value pair will be eliminated.
统计全局的key的状态,但是就算没有数据输入,他也会在每一个批次的时候返回之前的key的状态。
这样的缺点:如果数据量太大的话,我们需要checkpoint数据会占用较大的存储。而且效率也不高
1 | //[root@bda3 ~]# nc -lk 9999 |
二、mapWithState (效率更高,生产中建议使用)
mapWithState:也是用于全局统计key的状态,但是它如果没有数据输入,便不会返回之前的key的状态,有一点增量的感觉。
这样做的好处是,我们可以只是关心那些已经发生的变化的key,对于没有数据输入,则不会返回那些没有变化的key的数据。这样的话,即使数据量很大,checkpoint也不会像updateStateByKey那样,占用太多的存储。
官方代码如下:
1 | /** |